package chemtools_logica.LN.SFBean;

import chemtools_logica.BDL.IR.BDL_SFAlmacenRemote;
import chemtools_logica.BDL.IR.BDL_SFEmpresaRemote;

import chemtools_logica.BDL.IR.BDL_SFEventoxinsumoRemote;
import chemtools_logica.BDL.IR.BDL_SFIsumoRemote;

import chemtools_logica.BDL.IR.BDL_SFUbigeoRemote;

import chemtools_logica.Beans.AlmacenBean;

import chemtools_logica.Beans.EventoxinsumoBean;
import chemtools_logica.Beans.ProductoBean;

import chemtools_logica.Entidades.Almacen;
import chemtools_logica.Entidades.Eventoxinsumo;
import chemtools_logica.Entidades.Producto;

import chemtools_logica.Entidades.Ubigeo;

import chemtools_logica.LN.IL.LN_SFAlmacenLocal;
import chemtools_logica.LN.IR.LN_SFAlmacenRemote;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import javax.ejb.EJB;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless(name = "LN_SFAlmacen", mappedName = "map-LN_SFAlmacen")
public class LN_SFAlmacenBean implements LN_SFAlmacenRemote, LN_SFAlmacenLocal {
    @Resource
    SessionContext sessionContext;
    @PersistenceContext(unitName = "Chemtools_Logica")
    private EntityManager em;

    
    @EJB
    private BDL_SFAlmacenRemote bDL_SFAlmacenRemote;
    @EJB
    private BDL_SFUbigeoRemote bDL_SFUbigeoRemote;
    
    public List<AlmacenBean> getAllAlmacen(){
            List<Almacen>almacenEntidad = bDL_SFAlmacenRemote.getAllAlmacenActivos();
            
            List<AlmacenBean> almacenBean = new ArrayList<AlmacenBean>();
            
            for(Almacen entidad : almacenEntidad){
                AlmacenBean bean  = new AlmacenBean();
                bean = this.convertEntityToBeanAlmacen(entidad);
                
                almacenBean.add(bean);
            }
            
                return almacenBean;   
           
        }
    
    public void updateAlmacen(AlmacenBean bean){
        Almacen entidad=new Almacen();
        entidad=convertBeanToEntity(bean,0);
        bDL_SFAlmacenRemote.mergeAlmacen(entidad);
        
    }
    
    public List<AlmacenBean> busquedaAlmacen(AlmacenBean tAlmacen){ 
        List<Almacen> listaEntidad = bDL_SFAlmacenRemote.busquedaAlmacen(tAlmacen);
        
        List<AlmacenBean> almacenBean = new ArrayList<AlmacenBean>();
        
        for(Almacen entidad : listaEntidad){
            AlmacenBean bean  = new AlmacenBean();
            bean = this.convertEntityToBeanAlmacen(entidad);
            
            almacenBean.add(bean);
        }

        return almacenBean;
        
    }
    public List<AlmacenBean> getAlmacenActivos(){
        List<Almacen> almacenEntidad = bDL_SFAlmacenRemote.getAllAlmacenActivos();
                           
        List<AlmacenBean> almacenBean = new ArrayList<AlmacenBean>();
        
        for(Almacen entidad : almacenEntidad){
            AlmacenBean bean  = new AlmacenBean();
            bean = this.convertEntityToBeanAlmacen(entidad);
            
            almacenBean.add(bean);
        }
            
        return almacenBean;
            
    }
    
    public boolean verificarNombreDupli(String nombre){
        boolean exi = bDL_SFAlmacenRemote.existeNombreAlmacen(nombre);
        return exi;
    }
    //0 = EDITAR, 1 = AGREGAR
    public Almacen convertBeanToEntity(AlmacenBean bean, int opc){
        Almacen entidad=new Almacen();
        if(opc == 0){
            entidad.setIdAlmacen(bean.getIdAlmacen());
        }
        entidad.setNombre(bean.getNombre());
        entidad.setTipoAlmacen(bean.getTipoAlmacen());
        entidad.setDireccion(bean.getDireccion());
        entidad.setCapacidad(bean.getCapacidad());
        entidad.setEstado(bean.getEstado());
        entidad.setIdDepartamento(bean.getIdDepartamento());
        entidad.setIdDistrito(bean.getIdDistrito());
        entidad.setIdProvicia(bean.getIdProvicia());
        entidad.setTelefono(bean.getTelefono());
        
        return entidad;
    }

    public AlmacenBean convertEntityToBeanAlmacen (Almacen almacen){
        AlmacenBean almacenBean = new AlmacenBean();
            almacenBean.setCapacidad(almacen.getCapacidad());
            almacenBean.setDireccion(almacen.getDireccion());
            almacenBean.setEstado(almacen.getEstado());
            almacenBean.setIdAlmacen(almacen.getIdAlmacen());
            almacenBean.setIdDepartamento(almacen.getIdDepartamento());
            almacenBean.setIdDistrito(almacen.getIdDistrito());
            almacenBean.setIdProvicia(almacen.getIdProvicia());
            almacenBean.setNombre(almacen.getNombre());
            almacenBean.setTipoAlmacen(almacen.getTipoAlmacen());
            almacenBean.setTelefono(almacen.getTelefono());
        
        // Ubigeo ubigeo=bDL_SFAlmacenRemote.getDatosUbigeo(almacen.getIdDepartamento(), almacen.getIdProvicia(), almacen.getIdDistrito());
        List<Ubigeo> ubigeo=bDL_SFUbigeoRemote.getUbigeo(almacen.getIdDepartamento(), almacen.getIdProvicia(), almacen.getIdDistrito());
         almacenBean.setIdDepartamentoNombre(ubigeo.get(0).getDepartamento());
         almacenBean.setIdProviciaNombre(ubigeo.get(0).getProvincia());
         almacenBean.setIdDistritoNombre(ubigeo.get(0).getDistrito()); 
          
                if(almacen.getEstado() == 0){
                    almacenBean.setStyleEstado("background-color:#EAB7B7;color:#675a5a;");
                }else{
                    almacenBean.setStyleEstado("background-color:#C9E5F6;color:#675a5a;");
                }
              
                 if(almacen.getTipoAlmacen() == 1){
                 almacenBean.setTipoAlmacentxt("INSUMO");  
                }
                 if(almacen.getTipoAlmacen() == 2){
                 almacenBean.setTipoAlmacentxt("PRODUCTO");  
                }
     
        return almacenBean;
    }
    
    public void addAlmacen(AlmacenBean almacen){
        Almacen eAlmacen=new Almacen();
        eAlmacen=this.convertBeanToEntity(almacen,1);
        bDL_SFAlmacenRemote.mergeAlmacen(eAlmacen);  
    }
   // 
    public List<AlmacenBean> getAllAlmacenes(){
        List<Almacen>almacenes = bDL_SFAlmacenRemote.allAlmacenesActivosInsumo();
        List<AlmacenBean>beanAlmacenes = new ArrayList<AlmacenBean>();
        
        for(Almacen entidad : almacenes){
            AlmacenBean bean = new AlmacenBean();
            
            bean.setIdAlmacen(entidad.getIdAlmacen());
            bean.setNombre(entidad.getNombre());
            bean.setCapacidad(entidad.getCapacidad());
            
            beanAlmacenes.add(bean);
        }
        
        return beanAlmacenes;
    }
    
    public List<AlmacenBean> getAllAlmacenes1(){
        List<Almacen>almacenes = bDL_SFAlmacenRemote.allAlmacenesActivosProducto();
        List<AlmacenBean>beanAlmacenes = new ArrayList<AlmacenBean>();
        
        for(Almacen entidad : almacenes){
            AlmacenBean bean = new AlmacenBean();
            
            bean.setIdAlmacen(entidad.getIdAlmacen());
            bean.setNombre(entidad.getNombre());
            bean.setCapacidad(entidad.getCapacidad());
            
            beanAlmacenes.add(bean);
        }
        
        return beanAlmacenes;
    }
    
    
    public List<AlmacenBean> getAllAlmacenesBusqeuda(String nombre){
        List<Almacen>almacenes = bDL_SFAlmacenRemote.getAlmacenBusqueda(nombre);
        List<AlmacenBean>beanAlmacenes = new ArrayList<AlmacenBean>();
        
        for(Almacen entidad : almacenes){
            AlmacenBean bean = new AlmacenBean();
            
            bean.setIdAlmacen(entidad.getIdAlmacen());
            bean.setNombre(entidad.getNombre());
            bean.setCapacidad(entidad.getCapacidad());
            
            beanAlmacenes.add(bean);
        }
        
        return beanAlmacenes;
    } 
    
    public int insumosEnAlmacen(int idAlmacen){
        int cap = bDL_SFAlmacenRemote.countInsumosEnAlmacen(idAlmacen);
        
        return cap;
    }
    
    public boolean canInsertAlmacen(int idAlmacen){
        boolean tOf = bDL_SFAlmacenRemote.capAlmacenInsums(idAlmacen);
        
        return tOf;
    }
    
    public boolean canInsertAlmacen1(int idAlmacen){
        boolean tOf = bDL_SFAlmacenRemote.capAlamcenProducto(idAlmacen);
        
        return tOf;
    }
    public boolean almcenTieneProducto(int idAlmacen) {
        return bDL_SFAlmacenRemote.almacenTieneProducto(idAlmacen);
    }
    
    public boolean almcenTieneInsumo(int idAlmacen) {
        return bDL_SFAlmacenRemote.almacenTieneInsumo(idAlmacen);
    }
   
}
